package com.szrt.day20170505.ch01;


/**
 * 用来模拟链表
 * @author zsrt
 *
 */
public class LinkList {
	
	private Node head;
	
	
	
	public LinkList(Node head){
		this.head = head;
	}
	
	
	
	/**
	 * 添加1个节点： 默认放在链表的末尾  5
	 * @param node
	 */
	public void addNode(Node node){
		
		//第1次
		//head.setNext(node);
		
		
		//首先 要拿到头节点  并且以头结点作为当前节点p
		
		Node p = head;
		
		while(true){
			
			if(p.getNext() == null){
				
				//说明已经到达了链表的末尾 比如第1次
				p.setNext(node);
				
				//跳出死循环
				break;
			}

			//当前节点p指向 当前节点的下一个节点
			if(p!=null){
				p = p.getNext();
			}
		}
	}
	
	
	
	/**
	 * 10
	 * @param insertNode  要插入的节点 3
	 * @param parentNode  插入到哪个节点的后面  参照物节点  2 
	 */
	public void insertNode(Node insertNode, Node parentNode){
		
		
		//1 找到头结点 
		Node p = this.head;
		
		
		//2 从头节点开始循环 找到参照物节点为止
		while(true){
			p= p.getNext();
			if(p !=null){
				if(p.getData() == parentNode.getData()){
					//2.1 把3的下一个节点 = 参照物节点的下一个节点
					insertNode.setNext(parentNode.getNext());
					
					//2.2  把参照物节点的下一个节点指向要插入的节点3
					parentNode.setNext(insertNode);
					
					break;
					
				}
			}else{
				break;
			}
		}
	}
	
	
	/**
	 * 打印链表
	 */
	public void printLink(){
		
		//1先拿到头节点的下一个节点
		Node p = head.getNext();
		while(true){
			
			if(p==null){
				System.out.println("链表为null...");
			}else{
				
				//1 打印内容
				System.out.print(p.getData() + "-->");
				
				//2 让当前节点指向当前节点的下一个节点
				p = p.getNext();
				
				if(p==null){
					//说明已经到了链表的末尾
					break;
					
				}
				
			}
			
			
		}
		
		System.out.println();
		
	}
	
	
	
	/**
	 * 删除节点deleteNode
	 * @param deleteNode
	 */
	public void deleteNode(Node deleteNode){
		
		//1 找到头节点
		
		Node p = this.head;
		
		while(true){
			
			
			
			
			
			//当前节点的下一个节点的内容  == deleteNode的内容 
			
			if(p!=null){
				if(p.getNext().getData() == deleteNode.getData()){
					
					//让当前节点的下一个节点的下一个节点 赋值个当前节点的下一个加点
					p.setNext(p.getNext().getNext());
					
					break;
					
				}
			}else{
				//已经到了链表的末尾
				break;
			}
			
			p=p.getNext();
		}
		
	}
	
	

}
